home *** CD-ROM | disk | FTP | other *** search
/ Plug-In Power Pack for Netscape Communicator / Plug-In Power Pack for Netscape Communicator.iso / plugins / dataviews / dvtools / examples / programs / proto_multi.c < prev    next >
C/C++ Source or Header  |  1997-05-08  |  5KB  |  167 lines

  1. #ifndef lint
  2. static char SccsId[]= "@(#)proto_multi.c    V1.11    3/13/95";
  3. #endif
  4. /*
  5. |    file name - proto_multi.c
  6. |===================================================================
  7. |
  8. |    This program demostrates how to invoke two prototype from
  9. |    DV-Tools. Each prototype runs in its own window, however
  10. |    you could have change the example to have one window with
  11. |    two prototype areas.  You could also expand this program by
  12. |    adding additional DV-Tools calls for activities in a third window.
  13. |
  14. |    Each prototype enviroment gets a top view, a screen and
  15. |    drawport attributes.  In this example we set the drawport
  16. |    attributes so the whole view is stretched into the whole
  17. |    screen. Each prototype as its own set of views even though
  18. |    each window is using the same views.
  19. |
  20. |    This example shows you how you would gather you own events,
  21. |    process the window events and then call TprotoHandleInput.
  22. |    Even though TprotoHandleInput will process window events
  23. |    its better to do it yourself if you plan to integrate
  24. |    a prototype with another DV-Tools application.
  25. |
  26. |    The program will QUIT if you select "QUIT" from either
  27. |    prototype or QUIT either window.
  28. |
  29. |===================================================================
  30. */
  31.  
  32. #include "std.h"
  33. #include "dvstd.h"
  34. #include "dvtools.h"
  35. #include "dvGR.h"
  36. #include "GRfundecl.h"
  37. #include "GRkeysym.h"
  38.  
  39. #include "Tfundecl.h"
  40. #include "VOfundecl.h"
  41.  
  42. /* Include the function stubs need to make the executable smaller.
  43. |  Proto routines normally link in DV-Draw code, these stubs will
  44. |  avoid this.
  45. */
  46. #include "protostubs.h"
  47.  
  48. #define MAXWINS 2
  49.  
  50. char *view_name[MAXWINS] = {"pix1.v", "pix2.v"};
  51. LOCAL RECTANGLE whole_world = {XMIN, YMIN, XMAX, YMAX};
  52.  
  53. int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
  54.                      LPSTR lpCmdLine,  int nCmdShow  )
  55.   {
  56.   /* argv[1] - display device (default is DVDEVICE) */
  57.  
  58.   OBJECT screen[MAXWINS], current_screen;
  59.   PROTO_ENV proto_env[MAXWINS];
  60.   DRAWPORT_ATTRIBUTES dp_atts;
  61.   OBJECT location;
  62.   int i, quit_status = NO;
  63.   char *device = NULL;
  64.   int argc;
  65.   char **argv;
  66.  
  67.  
  68.   make_argv(&argc,&argv,GetCommandLine());
  69.   /* 
  70.    *   Initialize DV-Tools using the default DVconfig path
  71.    */
  72.   TInit ((char *) NULL, (char *) NULL);
  73.  
  74.   /*
  75.    *   Open a screen for each view specified on the command line, draw the
  76.    *   view, enable events in the screen, and set the cursor.
  77.    */
  78.   if (argc > 1)
  79.     device = argv[1];
  80.  
  81.   for (i = 0; i < MAXWINS; i++)
  82.     {
  83.       /* Create the windows and step up polling */
  84.       screen[i] = TscOpenSet (device, (char *)NULL,
  85.                               V_WINDOW_WIDTH, 350,
  86.                               V_WINDOW_HEIGHT, 350,
  87.                               V_WINDOW_NAME, "proto_multi",
  88.                               V_WINDOW_X, 20 + 350 * i,
  89.                               V_WINDOW_Y, 20,
  90.                               V_X_EXPOSURE_BLOCK, YES,
  91.                               V_END_OF_LIST);
  92.       TscErase (screen[i]);
  93.       VOscWinEventMask ((ULONG) V_KEYPRESS | V_BUTTONPRESS | V_MOTIONNOTIFY |
  94.                                 V_EXPOSE | V_RESIZE | V_WINDOW_QUIT,
  95.             0L);
  96.  
  97.       /* Initialize the prototype environment. this will display
  98.       |  the "whole" top view in a stretch drawport taking up
  99.       |  the "whole" screen/window.
  100.       */
  101.       dp_atts.vvp = NULL;
  102.       dp_atts.wvp = &whole_world;
  103.       dp_atts.stretch_flag = (DV_BOOL) YES;
  104.  
  105.       /* TprotoInit() will return NULL if the view_name couldn't be loaded */
  106.       proto_env[i] = (PROTO_ENV) TprotoInit (screen[i], view_name[i], &dp_atts);
  107.     }
  108.  
  109.   /*
  110.    *   Main event loop.  Get the next location object, determine which
  111.    *   screen it came from and set the current screen to that screen,
  112.    *   then switch on the location object's type.
  113.    */
  114.   FOREVER
  115.   {
  116.     /* Handle Event */
  117.     location = VOloWinEventPoll ((int)V_NO_WAIT);
  118.     if (location)
  119.       {
  120.         current_screen = VOloScreen (location);
  121.         if (current_screen)
  122.           VOscSelect (current_screen);
  123.         i = (current_screen == screen[0]) ? 0 : 1;
  124.  
  125.         switch (VOloType (location))
  126.           {
  127.           case V_EXPOSE:
  128.             TprotoRedraw (proto_env[i]);
  129.             break;
  130.           case V_RESIZE:
  131.             TprotoReset (proto_env[i]);
  132.             break;
  133.           case V_WINDOW_QUIT:
  134.             quit_status = YES;
  135.             break;
  136.           default:
  137.             if (TprotoHandleInput (proto_env[i], location) == V_TPROTO_QUIT)
  138.               quit_status = YES;
  139.             break;
  140.           }
  141.       }
  142.  
  143.  
  144.     /* If we got a QUIT rule or window event, break out of the loop */
  145.     if (quit_status)
  146.       break;
  147.  
  148.     /* Update each prototype's dynamics */
  149.     for (i = 0; i < MAXWINS; i++)
  150.       /* To avoid error messages, we only update if proto_env is valid */
  151.       if (proto_env[i])
  152.         TprotoUpdate (proto_env[i]);
  153.   }
  154.  
  155.   /* Cleanup */
  156.   for (i = 0; i < MAXWINS; i++)
  157.     {
  158.       VOscSelect (screen[i]);
  159.       TprotoCleanup (proto_env[i]);
  160.       TscClose (screen[i]);
  161.     }
  162.  
  163.   TTerminate ();
  164.  
  165.   return EXIT_OK;
  166. }
  167.